package com.gengzp.common.model.pagination.req;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.gengzp.common.document.annotations.ApiModel;
import com.gengzp.common.document.annotations.ApiModelProperty;
import jakarta.validation.constraints.Min;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;

/**
 * @ClassName Pagination
 * @Description 分页查询请求实体类, 所有分页查询请求实体都必须继承该类
 * @Author gengzp
 * @Date 2025/5/11 0:07
 */
@Data
@ApiModel(description = "分页查询请求实体类, 所有分页查询请求实体都必须继承该类")
public class PaginationReq implements Serializable {

    @Serial
    private static final long serialVersionUID = 2241071769493395190L;

    //===================== 分页查询请求字段 =====================

    /**
     * 查询页码
     */
    @Min(value = 1, message = "查询页码不能小于1")
    @ApiModelProperty(value = "查询页码, 默认为: 1", required = true)
    private Integer pageNum = 1;

    /**
     * 查询每页数据条数
     */
    @Min(value = 1, message = "查询每页数据条数不能小于1")
    @ApiModelProperty(value = "查询每页数据条数, 默认为: 10", required = true)
    private Integer pageSize = 10;

    /**
     * 查询创建时间 开始
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "查询创建时间 开始, 格式: yyyy-MM-dd HH:mm:ss")
    private Date createdTimeStart;

    /**
     * 查询创建时间 结束
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "查询创建时间 结束, 格式: yyyy-MM-dd HH:mm:ss")
    private Date createdTimeEnd;

    /**
     * 查询修改时间 开始
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "查询修改时间 开始, 格式: yyyy-MM-dd HH:mm:ss")
    private Date lastModifiedTimeStart;

    /**
     * 查询修改时间 结束
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "查询修改时间 结束, 格式: yyyy-MM-dd HH:mm:ss")
    private Date lastModifiedTimeEnd;

    //===================== 分页查询计数字段 (仅用于组装分页查询结果信息时传递数据) =====================

    /**
     * 所有数据总条数
     */
    private Integer total = 0;

    /**
     * 所有数据总页数
     */
    private Integer pageCount = 0;

}
